package com.yxh.www.author.api;

import com.yxh.www.author.domain.SmAccount;
import com.yxh.www.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 授权中心 - 系统授权第三方账户API集
 * </p>
 *
 * @author yangxiaohui
 * @since 2020/5/12
 */
@FeignClient(value = "author-server", contextId = "authorSmAccount")
public interface AuthorSmAccountApi {
    /**
     * 新增系统第三方账户
     *
     * @param accountName 账户名   必填
     * @param remark      账户备注  非必填
     * @param scopeIp     可访问IP域    必填
     * @param userId      用户ID  必填
     * @return 统一响应 {@link Result}
     */
    @PostMapping("/smAccount/addSmAccount")
    Result<Object> addSmAccount(@RequestParam String accountName,
                                @RequestParam(required = false) String remark,
                                @RequestParam String scopeIp,
                                @RequestParam String userId);

    /**
     * 修改系统第三方账户
     *
     * @param id            账户ID    必填
     * @param accountStatus 账户状态 （0：正常；1：失效）
     * @param remark        备注
     * @param scopeIp       可访问IP域    必填
     * @return 统一响应 {@link Result}
     */
    @PutMapping("/smAccount/modifySmAccount")
    Result<Object> modifySmAccount(@RequestParam String id,
                                   @RequestParam(required = false) String accountStatus,
                                   @RequestParam(required = false) String remark,
                                   @RequestParam(required = false) String scopeIp);

    /**
     * 根据ID删除系统第三方账户
     *
     * @param ids 账户ID集合
     * @return 统一响应 {@link Result}
     */
    @DeleteMapping("/smAccount/removeSmAccount")
    Result<Object> removeSmAccount(@RequestParam String[] ids);

    /**
     * 查询系统应用列表
     *
     * @param accountName 应用名称 模糊匹配
     * @param userId      用户ID 精准匹配
     * @return 统一响应 {@link Result<List>} 实体 {@link SmAccount}
     */
    @GetMapping("/smAccount/listSmAccount")
    Result<List<SmAccount>> listSmAccount(@RequestParam(required = false) String accountName,
                                          @RequestParam(required = false) String userId);

    /**
     * 分页查询系统应用列表
     *
     * @param accountName 应用名称 模糊匹配
     * @param userId      用户ID 精准匹配
     * @param pageNum     页码          默认值 1
     * @param pageSize    页面数据长度    默认值 20
     * @return 统一响应 {@link Result}
     */
    @GetMapping("/smAccount/pageSmAccount")
    Result<Object> pageSmAccount(@RequestParam(required = false) String accountName,
                                 @RequestParam(required = false) String userId,
                                 @RequestParam(defaultValue = "1") Long pageNum,
                                 @RequestParam(defaultValue = "20") Long pageSize);

    /**
     * 第三方应用获取Token
     *
     * @param userId      所属用户ID  必填
     * @param accountName 应用名称    必填
     * @param secretKey   私钥  必填
     * @return 统一响应 {@link Result}
     */
    @PostMapping("/authorSmAccount")
    Result<Object> authorSmAccount(@RequestParam String userId,
                                   @RequestParam String accountName,
                                   @RequestParam String secretKey);

}
